import java.io.*;
import java.util.HashMap;
import java.util.Set;

/*
    练习:
        对文本的内容进行排序
        按照(1,2,3....)顺序排序
    分析:
        1.创建一个HashMap集合对象,key:存储每行文本的序号(1,2,3,..);value:存储每行的文本
        2.创建字符缓冲输入流对象,构造方法中绑定字符输入流
        3.创建字符缓冲输出流对象,构造方法中绑定字符输出流
        4.使用字符缓冲输入流中的方法readLine,逐行读取文本
        5.对读取到的文本进行切割,获取行中的序号和文本内容
        6.把切割好的序号和文本的内容存储到HashMap集合中(key序号是有序的,会自动排序1,2,3,4..)
        7.遍历HashMap集合,获取每一个键值对
        8.根据键获取值,使用字符缓冲输出流中的方法write,把值(文本)写入到文件中
        9.释放资源
 */
public class TextSort {
    public static void main(String[] args) {
        try (//2.创建字符缓冲输入流对象,构造方法中绑定字符输入流
             BufferedReader bfr = new BufferedReader(new FileReader("IOAdvanced/乱序出师表.txt"));
             //3.创建字符缓冲输出流对象,构造方法中绑定字符输出流
             BufferedWriter bfw = new BufferedWriter(new FileWriter("IOAdvanced/出师表.txt"));
        ) {
            //1.创建一个HashMap集合对象,key:存储每行文本的序号(1,2,3,..);value:存储每行的文本
            HashMap<String, String> map = new HashMap<>();
            //4.使用字符缓冲输入流中的方法readLine,逐行读取文本
            String line;
            while ((line = bfr.readLine()) != null) {
                //5.对读取到的文本进行切割,获取行中的序号和文本内容
                //String中的split方法，根据文本中的"."号进行切割
                //被切割的部分分别存储到数组中，此处每行被切割成两部分，左边是序号，右边是内容
                String[] array = line.split("\\.");
                //6.把切割好的序号和文本的内容存储到HashMap集合中(key序号是有序的,会自动排序1,2,3,4..)
                map.put(array[0], array[1]);
            }
            //7.遍历HashMap集合,获取每一个键值对
            Set<String> set = map.keySet();
            for (String key : set) {
                //8.根据键获取值,使用字符缓冲输出流中的方法write,把值写入到文件中
                String text = map.get(key);
                bfw.write(text.trim());//String类的trim方法：消除首尾空格。
                bfw.newLine();//换行
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
